﻿using System;
using System.Threading;
using OdaOperation.Core.Creators;
using OdaOperation.Core.Parameters;
using OdaOperation.DB;
using OdaOperation.Model;
using Teigha.Core;
using Teigha.TD;

namespace OdaOperation.Extends
{
    /// <summary>
    /// 简化了将表格块添加到数据库中的过程
    /// </summary>
    public static class ExtendTable
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="db">扩展方法所属的 DbDatabase 对象</param>
        /// <param name="layerName">图层名称</param>
        /// <param name="blockName">块名称</param>
        /// <param name="tableBlockModels">包含表格信息的 TableBlockModel 对象</param>
        /// <returns></returns>
        // 标记为过时的方法，建议使用带 TableParameter 参数的版本
        [Obsolete("请使用 TableCreator AppendOdDbTableBlock(this DbDatabase db, TableParameter parameter)")]
        public static TableCreator AppendOdDbTableBlock(this DbDatabase db, string layerName, string blockName, TableBlockModel tableBlockModels)
        {
            // 启动内存事务管理器
            MemoryTransaction value = MemoryManager.GetMemoryManager().StartTransaction(Thread.CurrentThread.ManagedThreadId);

            // 创建 TableCreator 实例
            TableCreator tableCreator = new TableCreator(db.Database);

            // 设置表格参数
            tableCreator.SetParameter(new TableParameter
            {
                BlockName = blockName,
                FontSize = tableBlockModels.FontSize,
                FontStyle = tableBlockModels.FontStyle,
                LayerName = layerName,
                TableData = tableBlockModels.Data,
                TableSize = new TableSize(tableBlockModels.Rows, tableBlockModels.Cols),
                Title = tableBlockModels.Title
            });

            // 创建表格
            tableCreator.Create();

            // 停止内存事务管理器
            MemoryManager.GetMemoryManager().StopTransaction(value);

            // 返回 TableCreator 对象
            return tableCreator;
        }

        /// <summary>
        /// 新版方法，使用 TableParameter 作为参数
        /// </summary>
        /// <param name="db"></param>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public static TableCreator AppendOdDbTableBlock(this DbDatabase db, TableParameter parameter)
        {
            // 启动内存事务管理器
            MemoryTransaction value = MemoryManager.GetMemoryManager().StartTransaction(Thread.CurrentThread.ManagedThreadId);

            // 创建 TableCreator 实例
            TableCreator tableCreator = new TableCreator(db.Database);

            // 设置表格参数
            tableCreator.SetParameter(parameter);

            // 创建表格
            tableCreator.Create();

            // 停止内存事务管理器
            MemoryManager.GetMemoryManager().StopTransaction(value);

            // 返回 TableCreator 对象
            return tableCreator;
        }
    }

}